# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
#
# Copyright 2018-2019 Dimitar Dimitrov <dimitar@dinux.eu>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

VPATH = @srcdir@ @srcdir@/..

srcdir = @srcdir@
objdir = .
srcroot = $(srcdir)/../..
objroot = $(objdir)/../..
top_srcdir = @top_srcdir@

prefix = @prefix@
exec_prefix = @exec_prefix@

host_alias = @host_alias@
target_alias = @target_alias@

bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
tooldir = $(exec_prefix)/$(target_alias)

# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.
MULTIDIRS =
MULTISUBDIR =

SHELL =	/bin/sh

mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs

CC = @CC@

AS = @AS@

AR = @AR@

LD = @LD@

RANLIB = @RANLIB@

OBJDUMP = `t='$(program_transform_name)'; echo objdump | sed -e $$t`
OBJCOPY = `t='$(program_transform_name)'; echo objcopy | sed -e $$t`

# linker scripts
SCRIPTS = `ls ${srcdir}/ldscripts/*.x`

# object files needed
OBJS = \
	do_global_dtors.o gettimeofday.o \
	isatty.o putnum.o raise.o \
	inbyte.o outbyte.o sbrk.o stat.o syscalls.o \
	do_global_dtors.o

# Object files specific to particular targets.
EVALOBJS = ${OBJS}

CRTOBJS = crt0.o crt0-minrt.o
OUTPUTS = libgloss.a $(CRTOBJS)

INCLUDES = -I$(srcdir)/..

# Note that when building the library, ${MULTILIB} is not the way multilib
# options are passed; they're passed in $(CFLAGS).
CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES}
LDFLAGS_FOR_TARGET = ${MULTILIB}

.c.o:
	$(CC) $(CFLAGS_FOR_TARGET) -Os $(INCLUDES) -c $(CFLAGS) $<

.C.o:
	$(CC) $(CFLAGS_FOR_TARGET) -Os $(INCLUDES) -c $(CFLAGS) $<
.s.o:
	$(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $<

#
# GCC knows to run the preprocessor on .S files before it assembles them.
#
.S.o:
	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<

all: ${OUTPUTS} copy_scripts_to_objdir

copy_scripts_to_objdir: $(srcdir)/ldscripts/gen-ld-scripts.sh
	cp $(SCRIPTS) $(objdir)

#
# here's where we build the library for each target
#

libgloss.a: $(EVALOBJS)
	${AR} ${ARFLAGS} $@ $(EVALOBJS)
	${RANLIB} $@

# C Runtime Library startup code.
crt0.o: $(srcdir)/crt0.S
	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) $< -c -o $@

crt0-minrt.o: $(srcdir)/crt0.S
	$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -DMINRT $< -c -o $@

doc:

clean mostlyclean:
	rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x

distclean maintainer-clean realclean: clean
	rm -f Makefile config.status $(OUTPUTS)

.PHONY: install info install-info clean-info
install: $(OUTPUTS) $(srcdir)/ldscripts/gen-ld-scripts.sh
	for outputs in ${OUTPUTS}; do\
	 ${INSTALL_DATA} $${outputs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/$${outputs}; \
	done
	for s in $(SCRIPTS); do \
	  b=`basename $$s`; \
	  ${INSTALL_DATA} $$s ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/$$b ;\
	done
	${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/device-specs; \
	for s in ${srcdir}/device-specs/*; do \
	  b=`basename $$s`; \
	  $(INSTALL_DATA) $$s $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/device-specs/$$b ;\
	done

info:
install-info:
clean-info:

Makefile: $(srcdir)/Makefile.in config.status @host_makefile_frag_path@
	$(SHELL) config.status

config.status: $(srcdir)/configure
	$(SHELL) config.status --recheck
